package com.kang.controller;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.kang.common.util.PageResult;
import com.kang.common.util.R;
import com.kang.entity.Student;
import com.kang.service.IStudentService;
import com.kang.vo.StudentVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author kk
 * @since 2025-01-08
 */
@RestController
@RequestMapping("/student")
public class StudentController {

	@Autowired
	private IStudentService studentService;

	// 学生列表
	@RequestMapping("/list")
	public R getStudent() {
		return okResponse("list");
	}

	// 分页查询
	@GetMapping("/findByPage/{page}/{pageSize}")
	public R findByPage(@PathVariable("page") Integer page,
						@PathVariable("pageSize") Integer pageSize) {
		if (page <= 0 || pageSize <= 0) {
			return R.error().message("分页参数无效");
		}
		PageResult<Student> pr = studentService.findByPage(page, pageSize);
		return okResponse("pr");
	}

	// 条件带分页查询
	@PostMapping("/search/{page}/{pageSize}")
	public R search(@PathVariable("page") Integer page,
					@PathVariable("pageSize") Integer pageSize,
					@RequestBody(required = false) StudentVO vo) {
		if (page <= 0 || pageSize <= 0) {
			return R.error().message("分页参数无效");
		}
		PageResult<Student> pr = studentService.search(page, pageSize, vo);
		return okResponse("pr");
	}

	// 添加学生
	@PostMapping("/add")
	public R add(@RequestBody @Valid Student student) {  // 使用 @Valid 进行参数校验
		boolean flag = studentService.add(student);
		return flag ? okResponse("添加学生成功!") : errorResponse("添加学生失败!");
	}

	// 修改学生
	@PutMapping("/update")
	public R update(@RequestBody @Valid Student student) {
		boolean flag = studentService.updateById(student);
		return flag ? okResponse("修改学生成功!") : errorResponse("修改学生失败!");
	}

	// 删除学生
	@DeleteMapping("/delete/{ids}")
	public R delete(@PathVariable("ids") String ids) {  // 1,2,3
		if (StringUtils.isBlank(ids)) {
			return R.error().message("删除的学生ID为空");
		}
		List<String> sids = Arrays.asList(ids.split(","));
		boolean flag = studentService.removeByIds(sids);
		return flag ? okResponse("删除学生成功!") : errorResponse("删除学生失败!");
	}

	// 统一的成功响应方法
	private R okResponse(String key) {
		return R.ok().data(key, data);
	}

	// 统一的失败响应方法
	private R errorResponse(String message) {
		return R.error().message(message);
	}
}

